package iterativo.gals;

import iterativo.compilador.NoPilhaElementos;

public class PilhaRotulos {

    private NoPilhaElementos prim;

    public PilhaRotulos() {
    }

    public void libera() {

	NoPilhaElementos p = prim;

	while (p != null) {

	    NoPilhaElementos t = p.getProx();
	    p = null;
	    p = t;
	}
	prim = null;
    }

    public int pop() {

	if (vazia()) {
	    return -1;

	} else {
	    int valor = prim.getValor();
	    prim = prim.getProx();
	    return valor;
	}
    }

    public NoPilhaElementos popNoPilha() {

	if (vazia()) {
	    return null;

	} else {
	    NoPilhaElementos no = prim;
	    prim = prim.getProx();
	    return no;
	}
    }

    public void push(int v) {

	NoPilhaElementos novo = new NoPilhaElementos();
	novo.setValor(v);
	novo.setProx(prim);
	prim = novo;
    }

    public void pushNo(int v, boolean blocoIf) {
	NoPilhaElementos novo = new NoPilhaElementos();
	novo.setValor(v);
	novo.setBlocoRep(blocoIf);
	novo.setProx(prim);
	prim = novo;
    }

    public boolean vazia() {
	return (prim == null);
    }

    @Override
    public String toString() {

	NoPilhaElementos p = prim;
	String temp = "";

	while (p != null) {
	    temp = temp + p.getValor() + " ";
	    p = p.getProx();
	}
	return temp;
    }

    public int getPrim() {
	return prim.getValor();
    }

    public int tamanho() {

	if (prim == null) {
	    return 0;

	} else {

	    int contador = 1;
	    NoPilhaElementos p = prim;

	    while (p != null) {
		p = p.getProx();
		contador++;
	    }
	    return contador;
	}
    }

}
